﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;

namespace RiskMan.DataClass.BaseTransaqCalss
{
    /// <summary>
    /// Котировки по инструментам
    /// </summary>
    public class Quotations : INotifyPropertyChanged
    {
        #region Private

        private int _secid;
        private string _board;
        private string _seccode;
        private double _pointCost;
        private double _open;
        private double _bid;
        private double _offer;
        private double _last;
        private double _change;
        private double _closeprice;
        private string _status;
        private string _tradingstatus;

        #endregion

        #region Public
        /// <summary>
        /// внутренний код">
        /// </summary>
        public int Secid
        {
            get { return _secid; }
            set
            {
                if (_secid != value)
                {
                    _secid = value;
                    RaisePropertyChanged("Secid");
                }
            }
        }

        /// <summary>
        /// Идентификатор режима торгов по умолчанию
        /// </summary>
        public string Board
        {
            get { return _board; }
            set
            {
                if (_board != value)
                {
                    _board = value;
                    RaisePropertyChanged("Board");
                }
            }
        }

        /// <summary>
        /// Код инструмента
        /// </summary>
        public string Seccode
        {
            get { return _seccode; }
            set
            {
                if (_seccode != value)
                {
                    _seccode = value;
                    RaisePropertyChanged("Seccode");
                }
            }
        }

        /// <summary>
        /// Стоимость пункта цены
        /// </summary>
        public double PointCost
        {
            get { return _pointCost; }
            set
            {
                if (_pointCost != value)
                {
                    _pointCost = value;
                    RaisePropertyChanged("PointCost");
                }
            }
        }

        /// <summary>
        /// Цена первой сделки
        /// </summary>
        public double Open
        {
            get { return _open; }
            set
            {
                if (_open != value)
                {
                    _open = value;
                    RaisePropertyChanged("Open");
                }
            }
        }

        /// <summary>
        /// Лучшая котировка на покупку
        /// </summary>
        public double Bid
        {
            get { return _bid; }
            set
            {
                if (_bid != value)
                {
                    _bid = value;
                    RaisePropertyChanged("Bid");
                }
            }
        }

        /// <summary>
        /// Лучшая котировка на продажу
        /// </summary>
        public double Offer
        {
            get { return _offer; }
            set
            {
                if (_offer != value)
                {
                    _offer = value;
                    RaisePropertyChanged("Offer");
                }
            }
        }
        /// <summary>
        /// Цена последней сделки
        /// </summary>
        public double Last
        {
            get { return _last; }
            set
            {
                if (_last != value)
                {
                    _last = value;
                    RaisePropertyChanged("Last");
                }
            }
        }
        /// <summary>
        /// Изменение цены последней сделки по отношению к цене последней сделки предыдущего торгового дня 
        /// </summary>
        public double Change
        {
            get { return _change; }
            set
            {
                if (_change != value)
                {
                    _change = value;
                    RaisePropertyChanged("Change");
                }
            }
        }
        /// <summary>
        /// Цена закрытия
        /// </summary>
        public double Closeprice
        {
            get { return _closeprice; }
            set
            {
                if (_closeprice != value)
                {
                    _closeprice = value;
                    RaisePropertyChanged("Closeprice");
                }
            }
        }
        /// <summary>
        /// Статус «торговые операции разрешены/запрещены»
        /// </summary>
        public string Status
        {
            get { return _status; }
            set
            {
                if (_status != value)
                {
                    _status = value;
                    RaisePropertyChanged("Status");
                }
            }
        }
        /// <summary>
        /// Состояние торговой сессии по инструменту<
        /// </summary>
        public string Tradingstatus
        {
            get { return _tradingstatus; }
            set
            {
                if (_tradingstatus != value)
                {
                    _tradingstatus = value;
                    RaisePropertyChanged("Tradingstatus");
                }
            }
        }

        #endregion

        #region event PropertyChangedEventHandler

        public event PropertyChangedEventHandler PropertyChanged;

        protected void RaisePropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        #endregion
    }
}
